package com.sq.partner.manager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.sq.partner.manager.util.JMXUtils;
import com.sq.partner.manager.util.LogUtil;



/**
 * Mule连接器管理服务，通过设置JMX配置（serviceURL和objectName），可以获取连接器状态，启用和停用连接器
 * 
 * 
 */
public class ConnectorManager {
	private static Logger logger = LogUtil.getLog(ConnectorManager.class);
	
	/** 状态未知（对方JMX服务无法连接上） */
	public static final String STATUS_UNKNOW = "unknow";

	/** 服务名称 */
	private String name;
	/** 对应JMX服务的ServiceURL */
	private Map<String,String> serviceURL;
	/** ConnectorManager对象的objectName */
	private String objectName;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Map<String, String> getServiceURL() {
		return serviceURL;
	}

	public void setServiceURL(Map<String, String> serviceURL) {
		this.serviceURL = serviceURL;
	}

	public String getObjectName() {
		return objectName;
	}

	public void setObjectName(String objectName) {
		this.objectName = objectName;
	}

	/**
	 * 获取连接器状态 多台服务器
	 * 
	 * @return
	 */
	public List<String> getStatus(String ip) throws  Exception {
		List<String> resutl = new ArrayList<String>();
		for(Map.Entry<String, String> map:serviceURL.entrySet()){
			if(null != ip && !"".equals(ip)){
				if(!ip.equals(map.getKey())){
					continue; //如果传入服务器ip 和配置中比较 过滤掉不匹配的
				}
			}
			String str=null;
			try{
				str = (String)JMXUtils.invoke(map.getValue(), objectName,"getStatus", new Object[0], new String[0]);
			}catch(Exception e){
				logger.info(e);
			}
			resutl.add(str);
		}
		return resutl;
	}

	/**
	 * 启用连接器 多台服务器
	 * 
	 * @throws Exception
	 */
	public void start(String ip) throws Exception {
		for(Map.Entry<String, String> map:serviceURL.entrySet()){
			if(null != ip && !"".equals(ip)){
				if(!ip.equals(map.getKey())){
					continue; //如果传入服务器ip 和配置中比较 过滤掉不匹配的
				}
			}
			JMXUtils.invoke(map.getValue(), objectName, "start", new Object[0],new String[0]);
		}
	}

	/**
	 * 停用连接器 多台服务器
	 * 
	 * @throws Exception
	 */
	public void stop(String ip) throws Exception {
		for(Map.Entry<String, String> map:serviceURL.entrySet()){
			if(null != ip && !"".equals(ip)){
				if(!ip.equals(map.getKey())){
					continue; //如果传入服务器ip 和配置中比较 过滤掉不匹配的
				}
			}
			JMXUtils.invoke(map.getValue(), objectName, "stop", new Object[0],new String[0]);
		}
	}
}
